Design approaches known as Cloud Computing, High Performance Computing, and Network Functions Virtualization, among others, employ a virtualization technique whereby processing and memory resources of a compute node are shared between several “virtual machines”, for example running in mixed criticality systems in which there is a need to guarantee a certain Quality of Service (QoS), such as latency, bandwidth, etc., privileging some services with respect to others. A compute node is a combination of hardware resources, including one or more processing devices, memory and networking circuits, as well as a software module known as a hypervisor. The hypervisor is used to support a plurality of virtual machines, each virtual machine for example being associated with a different operating system. A compute node provides a single execution environment in which more than one virtual machine may be executed. Such virtualization leads to advantages in terms of cost due to the sharing of hardware resources.
For many applications it is desirable that, in addition to the processing resources available in the compute node, one or more of the virtual machines may make use of hardware accelerators for performing certain functions. For example, for certain video processing operations such as video encoding or decoding, hardware implementations are able to provide faster processing times than software implementations.
It would be desirable to provide a solution in which the hardware resources implementing one or more hardware accelerators may be shared by several virtual machines in order to meet their particular needs. However, there are technical problems in implementing such a solution.